From 8db030c862187372c09948138a395b790b7f290a Mon Sep 17 00:00:00 2001 From: "cl349@firebug.cl.cam.ac.uk" Date: Thu, 15 Sep 2005 08:59:35 +0000 Subject: [PATCH] Cleanup timeout code for when socket is already in use. Signed-off-by: Christian Limpach --- tools/python/xen/web/tcp.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/tools/python/xen/web/tcp.py b/tools/python/xen/web/tcp.py index 157d059540..b9dddd1526 100644 --- a/tools/python/xen/web/tcp.py +++ b/tools/python/xen/web/tcp.py @@ -19,6 +19,7 @@ import sys import socket import types import time +import errno from connection import * from protocol import * @@ -40,22 +41,16 @@ class TCPListener(SocketListener): # SO_REUSEADDR does not always ensure that we do not get an address # in use error when restarted quickly # we implement a timeout to try and avoid failing unnecessarily - timeout = time.time() + 30 - again = True - while again and time.time() < timeout: - again = False + while True: try: sock.bind((self.interface, self.port)) - except socket.error, (errno, strerrno): - if errno == 98: - again = True + return sock + except socket.error, (_errno, strerrno): + if _errno == errno.EADDRINUSE and time.time() < timeout: + time.sleep(0.5) else: - raise socket.error(errno, strerrno) - if again: - raise socket.error(98, "address in use") - - return sock + raise def acceptConnection(self, sock, protocol, addr): return TCPServerConnection(sock, protocol, addr, self) -- 2.30.2